﻿using System;
using System.Data.SQLite;
using System.Linq;
using System.Windows.Forms;
using Dapper;

namespace SoftLab.Formularios
{
    public partial class Usuarios : Template.Template
    {
        private static Usuarios _instance;

        public static Usuarios getInstance()
        {
            if (_instance == null || _instance.IsDisposed)
                _instance = new Usuarios();
            _instance.BringToFront();
            return _instance;
        }

        private Usuarios()
        {
            InitializeComponent();
            Cargar();
        }

        void Cargar()
        {
            using (var conexion = new SQLiteConnection(Properties.Settings.Default.ConnectionString))
            {
                conexion.Open();
                var q = "select username, permisos, lastlogin from usuario";
                var query = conexion.Query<Clases.Usuarios>(q);
                var usuarios = query.ToList();
                dataGridView1.DataSource = usuarios;
                conexion.Close();
            }
        }

        void Cargar(string nombre)
        {
            using (var conexion = new SQLiteConnection(Properties.Settings.Default.ConnectionString))
            {
                conexion.Open();
                var q = "select username, permisos, lastlogin from usuario where username like @Nombre";
                var query = conexion.Query<Clases.Usuarios>(q, new {Nombre = "%" + nombre + "%"});
                var pacientes = query.ToList();
                dataGridView1.DataSource = pacientes;
                conexion.Close();
            }
        }

        private void label2_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            var user = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString();
            var edit = new EditarUsuario(user);
            edit.ShowDialog();
            Cargar();
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            var add = new AgregarUsuario();
            add.ShowDialog();
            Cargar();
        }

        private void txtBuscar_TextChanged(object sender, EventArgs e)
        {
            Cargar(txtBuscar.Text);
        }

        private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
            {
                if (dataGridView1.CurrentRow != null)
                {
                    var nombre = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value.ToString();
                    if (
                        MessageBox.Show("¿Desea borrar el usuario " + nombre + "?", "Advertencia",
                            MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        using (var conexion = new SQLiteConnection(Properties.Settings.Default.ConnectionString))
                        {
                            conexion.Open();
                            var sql = "delete from usuario where username = @Username";
                            var i = conexion.Execute(sql, new {Username = nombre});
                            if (i == 0)
                                MessageBox.Show("Error al borrar el usuario.", "Error", MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);
                            else MessageBox.Show("Borrado correctamente.", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            conexion.Close();
                        }
                    }
                }
                Cargar();
            }
        }
    }
}
